import RouterLink from './components/router-link';
import RouterView from './components/router-view';
let Vue = null;
function install(_Vue){
    //install方法内部一般会用它来定义一些全局的内容 例如指令、全局组件、给vue原型扩展方法
    Vue = _Vue;
    Vue.component("router-link", RouterLink);
    Vue.component("router-view", RouterView);

    //用户将router属性注册到了new Vue中
    //希望每个子组件 都可以获取到router属性
    Vue.mixin({
        beforeCreate(){//mixin  可以给beforeCreate 这个生命周期增加合并方法
            
            //如果有router  说明你在根实例上增加了router  当前这个实例是根实例
            //渲染流程是先父后子，渲染完毕是先子后父
            if(this.$options.router){
                //根实例
                this._routerRoot = this; //将当前根实例放到了_routerRoot
                this._router = this.$options.router;
                //this._router 当前用户传入的router属性
                this._router.init(this); //调用插件中的init方法

                //如果用户更改了current是没有效果的  需要把_route也进行更新
                Vue.util.defineReactive(this,'_route',this._router.history.current);//将_route定义成响应式的
            }else{
                //子组件
                this._routerRoot = this.$parent && this.$parent._routerRoot
            }
            //这里所有的组件都拥有了_routerRoot属性
        }
    })
}

export default install;